package com.adamjwh.pratice.offer;

/**
 * 把只包含质因子2、3和5的数称作丑数（Ugly Number）。例如6、8都是丑数，但14不是，因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
 */
public class UglyNumber {
    public int GetUglyNumber_Solution(int index) {
        if(index <= 0) {
            return 0;
        }

        int[] uglyArray = new int[index];
        int m2 = 0;
        int m3 = 0;
        int m5 = 0;

        uglyArray[0] = 1;
        for (int i=1; i<index; i++) {
            int min = min(uglyArray[m2] * 2, uglyArray[m3] * 3, uglyArray[m5] * 5);
            uglyArray[i] = min;

            while (uglyArray[m2] * 2 == uglyArray[i]) {
                m2 ++;
            }
            while (uglyArray[m3] * 3 == uglyArray[i]) {
                m3 ++;
            }
            while (uglyArray[m5] * 5 == uglyArray[i]) {
                m5 ++;
            }
        }

        return uglyArray[index-1];
    }

    private int min(int num1, int num2, int num3) {
        int min = num1 < num2 ? num1 : num2;
        return min < num3 ? min : num3;
    }
}
